Route53のヘルスチェックでInternalELBをフェイルオーバさせてみた
はじめに
AWSチームのすずきです。
AWSがマネージドサービスとして提供しているAmazon Route 53、 SLA100%が謳われているDNSに加え、 ヘルスチェック機能が存在し、外部監視と連携したDNSフェイルオーバを簡単に利用する事が可能です。
本日(4/6)のアップデートにより、CloudWatchアラームと連携したRoute53のヘルスチェックが可能となりました。
早速、VPC内専用のInternalELBに、CloudwatchのアラームとRoute53ヘルスチェックを設定して、 DNSフェイルオーバの動作を試す事ができましたので、その内容を紹介させていただきます。
設定
ELB
- ELBの設定画面でCloudWatchのアラームを設置します。
- ELB配下に有効なインスタンスが1台未満となった場合に発動するアラームを作成しました。
Route53
ヘルスチェック
- AmazonRoute53の設定画面より、「Health checks」より新規設定を行います
- 今回のアップデートで選択可能になった「State of Cloudwatch alarm」を指定します
- 通知設定は省略しました
- CloudWatchと連携したヘルスチェック設定が作成されました
DNSフェイルオーバ設定
- Route53、テスト用のHostedZoneをプライベート用に用意しました
プライマリ
- ヘルスチェック対象としたInternalELBのエンドポイントをプライマリとした、CNAMEレコードを作成します
- ヘルスチェック指定は、先ほどRoute53ヘルスチェックで作成したものを指定します
セカンダリ
- テスト用にグローバルのエンドポイントをセカンダリのCNAMEレコードとして設定しました。
動作確認
プライマリ動作
- VPC内のEC2より、プライマリ設定したレコードが引ける事を確認ました
擬似障害発生
- ELBのヘルスチェック先のポートを無効なものに変更し、擬似障害を発生させました
- ELB配下のEC2インスタンスのステータス、「OutofService」となります
- CloudWatchのアラームが発動し、「ALARM」状態となります
- Route53のヘルスチェック「Unhealthy」となります。
セカンダリ動作
- セカンダリのレコードが利用される様になりました。
まとめ
従来プライベートサービスのDNSフェイルオーバを実現するためには、クラスタ製品の導入や、CloudWatchイベントやLambdaなどを駆使する必要がありましたが、 今回のアップデートによりRoute53でシンプルな設定が可能となりました。
Amazon Route 53のヘルスチェック、同一AWSアカウントのリソースであれば基本チェックであれば50件まで無料です。
障害時の誘導先となるセカンダリ、WebサービスであればS3のWebホスティングでソーリーページを準備する事で、低コストなバックアップ環境となる可能性があります。 縮退運転用の迂回経路、低コスト、高い信頼性で確保できるRoute53のヘルスチェックとDNSフェイルオーバ、是非ご活用ください。